/*
    move    运动函数

    @param  object      element     要运动的标签对象
    @param  object      object      要运动的css属性和最终属性值
    @param  function    callback    运动结束 执行的函数程序 默认值是空函数

*/ 

function move( element , object , callback = function(){} ){
    // 定义变量 存储 定时器个数
    let num = 0;

    // 循环遍历参数2    必须使用 let 声明 循环变量
    for( let type in object ){
        // 变量累加1
        num++ ;

        // 获取 初始值 兼容 透明度
        let startVal = type === 'opacity' ? window.getComputedStyle(element)[type]*100 : parseInt( window.getComputedStyle(element)[type] ) ;
        // 获取 最终值 兼容 透明度
        let endVal = type === 'opacity' ? object[type]*100 : object[type] ;

        // 设定定时器
        let time = setInterval( function(){
            // 计算步长值
            let step = ( endVal - startVal ) / 10 ;

            // 步长取整 正数向上取证  负数向下取整
            step = step > 0 ? Math.ceil(step) : Math.floor(step) ; 

            // 初始值累加步长值
            startVal += step ;

            // 将 新的数值 赋值给标签的css属性 兼容透明度
            element.style[type] = type === 'opacity' ?  startVal/100 : startVal + 'px' ;

            // 执行判断 初始值 累加至 最终值
            if( startVal === endVal ){
                // 清除定时器
                clearInterval( time );

                // 存储定时器个数变量 累减1
                num--;

                // 如果 变量累减至 初始值
                if( num === 0 ){
                    // 执行调用 参数3 对应的函数程序
                    callback() ;
                }
            }

        } , 30 ) ;
    }
}